package mobi.yuanshen.controller;

import lombok.extern.slf4j.Slf4j;
import mobi.yuanshen.anno.Log;
import mobi.yuanshen.pojo.Emp;
import mobi.yuanshen.pojo.PageBean;
import mobi.yuanshen.utils.Result;
import mobi.yuanshen.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.util.Arrays;

/**
 * 员工管理Controller
 */
@Slf4j
@CrossOrigin
@RestController
@RequestMapping("/emps")
public class EmpController {

    @Autowired
    EmpService empService;

    /**
     * 员工列表分页查询
     * @param page 页码
     * @param pageSize  每页的记录数
     * @param name  姓名
     * @param gender    年龄
     * @param begin 入职起始日期
     * @param end   入职结束日期
     * @return 分页查询的结果
     */
    @GetMapping
    public Result queryEmps (@RequestParam(defaultValue = "1") Integer page,
                             @RequestParam(defaultValue = "10") Integer pageSize,
                             String name,
                             Short gender,
                             @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
                             @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {
        log.info("分页查询，参数:{},{},{},{},{},{}",page,pageSize,name,gender,begin,end);
        PageBean pageBean =  empService.queryEmps (page,pageSize,name,gender,begin,end);
        return Result.success(pageBean);
    }


    /**
     * 批量删除员工
     * @param ids 要删除员工的id(s)
     * @return 删除的记录数
     */
    @DeleteMapping("/{ids}")
    @Log
    public Result delEmp (@PathVariable Integer[] ids) {
        log.info("接受到数据:{}",Arrays.toString(ids));
        Integer count =  empService.delEmp(ids);
        if (count == 0) {
            return Result.error("未删除任何记录");
        }
        return Result.success(count);
    }

    /**
     *新增单个员工的信息
     * @param emp 员工信息
     * @return 插入成功
     */
    @PostMapping
    @Log
    public Result insertEmp (@RequestBody Emp emp) {
        log.info("新增数据:{}",emp);
        empService.insertEmp(emp);
        return Result.success();
    }


    /**
     * 根据id查询员工的信息
     * @param id
     * @return 员工信息
     */
    @GetMapping("/{id}")
    public Result getEmpById (@PathVariable Integer id) {
        Emp emp = empService.queryEmpById (id);
        return Result.success(emp);
    }

    /**
     * 更新单个用户的信息
     * @param emp 用户信息
     * @return
     */
    @PutMapping
    @Log
    public Result updateEmp (@RequestBody Emp emp) {
        log.info("修改员工数据:{}",emp);
        empService.updateEmp (emp);
        return Result.success();
    }

}
